{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Deep Convolutional GANs\n",
    "\n",
    "Brief introduction to Deep Convolutional Generative Adversarial Networks or DCGANs. This notebook is organized as follows:\n",
    "\n",
    "1. **Research Paper**\n",
    "* **Background**\n",
    "* **Definition**\n",
    "* **Training DCGANs with MNIST dataset, Keras and TensorFlow**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Research Paper\n",
    "\n",
    "* [Unsupervised Representation Learning With Deep Convolutional](https://arxiv.org/pdf/1511.06434.pdf)\n",
    "\n",
    "## 2. Background\n",
    "\n",
    "Brief definition of some concepts, such as convolution, Convolutional Neural Network (CNN) and GANs.\n",
    "\n",
    "### Convolution\n",
    "\n",
    "Convolution is a mathematical operation which describes a rule of how to mix two functions or pieces of information.\n",
    "\n",
    "* Features Map $I$\n",
    "* Convolution kernel $K$\n",
    "* Map of transformed features $S(i, j)$\n",
    "\n",
    "![convolution](https://devblogs.nvidia.com/wp-content/uploads/2015/11/convolution.png)\n",
    "\n",
    "### Convolutional Neural Network (CNN)\n",
    "\n",
    "Convolutional networks are simply neural networks that use convolution in place of general matrix multiplication in at least one of their layers.\n",
    "\n",
    "These convolutional layers have parameters that are learned so that these filters are adjusted automatically to extract the most useful information for the task at hand.\n",
    "\n",
    "* Input is a multidimensional array of data,\n",
    "* Kernel is a multidimensional array of parameters,\n",
    "* These multidimensional arrays are tensors.\n",
    "\n",
    "#### Layers CNN\n",
    "\n",
    "* Convolution: extract features from imagem.\n",
    "* Pooling: reduce dimension of entry.\n",
    "* Dense / Fully connected: connect the layers.\n",
    "\n",
    "### GANs\n",
    "\n",
    "**Generative adversarial nets** consists of two models: a generative model $G$ that captures the data distribution, and a discriminative model $D$ that estimates the probability that a sample came from the training data rather than $G$.\n",
    "\n",
    "The generator distribution $p_g$ over data data $x$, the generator builds a mapping function from a prior noise distribution $p_z(z)$ to data space as $G(z;\\theta_g)$.\n",
    "\n",
    "The discriminator, $D(x;\\theta_d)$, outputs a single scalar representing the probability that $x$ came form training data rather than $p_g$.\n",
    "\n",
    "The **cost function** $V(G,D)$:\n",
    "\n",
    "$$ \\underset{G}{min} \\: \\underset{D}{max} \\; V_{GAN}(D,G) = \\mathbb{E}_{x\\sim p_{data}(x)}[log D(x)] + \\mathbb{E}_{z\\sim p_{z}(z)}[log(1 - D(G(z)))]$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Definition\n",
    "\n",
    "The difference between the simple GAN and the DCGAN, is the generator of the simple GAN is a simple fully connected network. The generator of the DCGAN uses the transposed convolution (Fractionally-strided convolution or \n",
    "Deconvolution) technique to perform up-sampling of 2D image size.\n",
    "\n",
    "DCGAN are mainly composes of convolution layers without max pooling or fully connected layers. It uses convolutional stride and transposed convolution for the downsampling and the upsampling. \n",
    "\n",
    "### Network Design\n",
    "\n",
    "<img src=\"../../img/network_design_dcgan.png\" width=\"600\"> \n",
    "\n",
    "\n",
    "### Cost Funcion\n",
    "\n",
    "\n",
    "$$ \\underset{G}{min} \\: \\underset{D}{max} \\; V_{DCGAN}(D,G) = \\mathbb{E}_{x\\sim p_{data}(x)}[log D(x)] + \\mathbb{E}_{z\\sim p_{z}(z)}[log(1 - D(G(z)))]$$\n",
    "\n",
    "> * Replace all max pooling with convolutional stride.\n",
    "    Use transposed convolution for upsampling.\n",
    "    Eliminate fully connected layers.\n",
    "    Use Batch normalization except the output layer for the generator and the input layer of the discriminator.\n",
    "    Use ReLU in the generator except for the output which uses tanh.\n",
    "    Use LeakyReLU in the discriminator.*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Training DCGANs with MNIST dataset,  Keras and TensorFlow\n",
    "\n",
    "A DCGANs implementation using the transposed convolution technique and the [Keras](https://keras.io/) library.\n",
    "\n",
    "* **Data**\n",
    "    * Rescale the MNIST images to be between -1 and 1.\n",
    "    \n",
    "* **Generator**\n",
    "    * Use the **inverse of convolution**, called transposed convolution.\n",
    "    * **ReLU activation** and **BatchNormalization**.\n",
    "    * The input to the generator is the **normal distribution** $z$ or latent sample (100 values).\n",
    "    * The last activation is **tanh**.\n",
    "    \n",
    "* **Discriminator**\n",
    "    * **Convolutional neural network**  and **LeakyReLU activation**.\n",
    "    * The last activation is **sigmoid**.\n",
    "    \n",
    "* **Loss**\n",
    "    * binary_crossentropy\n",
    "\n",
    "* **Optimizer**\n",
    "    * Adam(lr=0.0002, beta_1=0.5)\n",
    "\n",
    "* batch_size = 64\n",
    "* epochs = 100\n",
    "\n",
    "### 1. Load data\n",
    "\n",
    "#### Load libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:47.400174Z",
     "start_time": "2018-06-19T00:02:46.597063Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:49.021637Z",
     "start_time": "2018-06-19T00:02:47.402154Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from keras.datasets import mnist\n",
    "from keras.models import Sequential, Model\n",
    "from keras.layers import Input, Dense, LeakyReLU, BatchNormalization, ReLU\n",
    "from keras.layers import Conv2D, Conv2DTranspose, Reshape, Flatten\n",
    "from keras.optimizers import Adam\n",
    "from keras import initializers\n",
    "from keras.utils import plot_model\n",
    "from keras import backend as K"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Getting the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:49.602716Z",
     "start_time": "2018-06-19T00:02:49.023733Z"
    }
   },
   "outputs": [],
   "source": [
    "# load dataset\n",
    "(X_train, y_train), (X_test, y_test) = mnist.load_data()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Explore visual data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:50.191363Z",
     "start_time": "2018-06-19T00:02:49.604723Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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Z86cCeSelMJW0zbbbAPkj0W14ImqVTjiiCMAOPPMM4HCT7HFtMLr1VprrQXkyglg2223BWDjjTee7+tWXXXV9PjEE08sT+Yi07lzZyD33dp///3Tc94qX2211YD871ux37MePXoAcMstt6Rpf/zjHwGYMWNGkbmuLG9B+t+vhx9+uJrZSW211VYAvPbaaxV5P7WgREQkSqqgREQkSlF28S211FLp8RZbbAHA4MGDgfwukUI+/PBDAAYMGADA/fffn54bM2YMkBvwB7jssstKkOP6teaaawKw5JJLVjkn8dhwww3TY+8yOvjggwFo27Ztes4sMwb82WefpWneBb3RRhsBcMABB6TnfELA+++/X45sR8N/57p161aR9/OlJwB33HEHkPtbECufeLTeeusB1e3i825XgLXXXhvI/V2A3Pe8LO9dtjuLiIi0QJQtqFtvvTU97tOnT1Gv9RaXT+0Npz37U8kmm2zSwhzWt65du6bHffv2zTsXPt13794dgP/85z+VyViV+GScK664AoDevXun53wqeSHemt99993TNJ9G7eW44oorpufC43r23HPPAYVbUP/973+BXEsnfHovNEFnu+22A3JTneuFt/r+8Y9/VDkn+b1WRx99NJDr0YLytvjVghIRkSipghIRkShF1cXnsfV8tT00HoALu+wee+wxAK688so07csvvwTgzTffBGDq1KnpuZ133rngPSVj++23B+DOO+9M07x7yw0cODA9njhxYmUyVmU9e/YE4He/+91Cr/3444/T41133RXInySx7rrrljh3tefmm28G4JFHHml0bu7cuQBMmjSpSffyKDJvv/02kFs/FQrf5/XXXy8us1USdm1W2+23394ozbuvyy2eUhAREQlE0YLy+Ho+eBrG1vPV40899RSQP2nCB0bDaeNe23/99dcAjBs3Lj3ng6xhC80nVSjSORx++OFA4afQkSNHArko8a1JGOmgoQkTJgC5lfVhJImw5eR8enlrNm/ePKBw+RTLJ6Asv/zy873m888/T49LHO+wpMLJWx07dqxiTvI17EWB3N/qclMLSkREolS1FlQYwfj0008HcjX15MmT03NfffUVAHfffTcAs2bNSs898cQTef82VbiY8tRTTwVyCy1bm3Bq829/+1sgfzrvtGnTALj44osrm7GI+NTaY445BoBnn302PffRRx8BuenRCxPTk3GtCqOT+/+b8He6oX79+pU9T6UQTrtf0OepFP+u+uLc0BdffFGRPKgFJSIiUVIFJSIiUap4F98SSywB5E8N96atxykLY2f5tNByNXnXWGONstw3dr49RLh9SSGDBg0C4IUXXih3lqLlSxf69+/f4nv5FhzSNGHX+1lnnQXkT9X3yByFvPXWW0Bu6nrsNthgg0Zp77zzThVykuF/o8Nu6Q8++ADI/a0uN7WgREQkShVvQW2++eZA4Thce++9N9D8bcOl6fbYYw+gcFzCv//97+nxddddV7E81TLfbHDppZde4HU///nP8/775ZdfTo9jiLtWCd56P/TQQ4H82I8N+eJxWPCGhb4BobeyAJ588kkA5syZ0+y8Vlu5Nwb0JT3+9wDgkEMOAWC33XZrdP1FF10E5CZPlZtaUCIiEqWKt6CuvvpqID/ckLeYyt1y8vAhhaIitxb77LMPAJdffnmjcy+99BKQW7ALMH369MpkrAb4PmWdOnVK0/70pz8BhXsEFvR983GtI488Mk374YcfSpfZyITb3j/66KNAacd/R48eDcBtt91WsnvGoEOHDk26btNNNwVyf1fDVunqq68OwOKLLw7kj+v5dzRsZb766qtAblHzoovmqomxY8cW9wFaSC0oERGJkiooERGJUkW6+HxjO8jF3QsHPL3JX27e1RK+t09FrWc+KA0Lnlb+ySefAPW/AWFThNOXfWKPl124gZt3jXiXXTjRwQeevWsw5N0m++67b5rmE1K+//77ln+AiHk3VFN2FVjYhoXO/8bsueeeaZrH76wVYTeb/4265ZZbADjnnHMW+Fqf7ORl6vEOAb755hsA3n33XQD+8pe/pOd8GU84vOK//x7DMFziU87NCQtRC0pERKJUkRZUWAP7QF0Yu+yBBx4o+Xv6guBCiytHjBiRHp999tklf+/YhBG2F/QUWmjiRGvj389w2u2wYcPyrrngggvSY/8ujRkzBsgf1PZz4QQBt9JKKwFw2WWXpWmffvopkL9/UczRt4vh+zUB7LTTTkBuOvMzzzyTnvv2228Xeq+jjjoqPe7bt2+Jclh9xx9/fHrse635lvYL0/C7895776XnXnnllaLy4TEn/TvqPSvVoBaUiIhESRWUiIhEqWrbbYRdF76lRil4155vYuhbeUBu0O+qq65K08LtO+qNT0gptCLcDR8+PD0eP3582fMUo3BChHffhd8b54PuHp8QcivqvTvEoxdALmpEOOlhwIABQK7bz6OnAAwZMgSA559/Pk274oorAJg6dWqj/NTqBB/vvrrkkkua9fqw276euvhC/v+9GnbZZZe8/15YvM5yUgtKRESiVLUWVCmnlntLAXJPvr179wbyWwi9evUq2XvWAt9Yr9B22D5wesQRR1QyS1Fp06YNkIsvBnDaaacBMHv27DTN47vdf//9QH4csi5dugBwww03ALkp6QAffvghAMcdd1ya5lHhPQZaOAjuK/x79OiRpjXcWjvcJr3QRnKtgW/zLpXx8MMPV+291YISEZEoVaQFFS7I82OPCQdw0kknNeu+J598MgDnn39+mubbxnt/fri3VGuzwgorAIWnlt90001AfY/BLYxPp/VWE+QWNR577LFpmrdEt9lmGyA/fp4vDPWlFBdeeGF67s477wTyWz3Oo28//fTTaZof9+nTJ0076KCD8l7n3/mYhWN6Pv4ZLu1obnRxL3dF2G891IISEZEoqYISEZEoVaSLL4x958errLJKmnb99dcDuRhRU6ZMSc95t4pvbuZh5SEXRt5XUUNuVbp3YbVG3rUUxjFrKNwor7Xq169fozSfOBFOM/dpzeFW4w35NWFkiOZunzF06NCCx7HzzQXPPffcNG3XXXcF8id0FOrybMgjcoTbmPhWPYViG3q3YVMiUUjT+HDM+uuvn6YVG5WipdSCEhGRKFVtmrk/qUIuBpVPA/cBZID11ltvvvfwVoBP3YXCT8WtQTjV3jcr88kR4ULRG2+8EVDEcoBJkyYBuUW2kFvoHbbUnS/CffHFF9M0j302YcIEoL43HVwYn2pfKPbgGWeckR7PnDlzoffyltcWW2yRphXa8n3kyJEA3HzzzUD+3wJpGS/vBfXElJtaUCIiEiVVUCIiEqWKdPGFm7i99tprAGy11VaNrvOJEx07dmx0zidO+Gp+aP76qXq03HLLpcfhBBSAL774Ij0O1/y0djvssAOQvybPu5TC7WB88o7Hw6v3DQXLIYym0Vz+/+Sxxx5L0/xvgCZHlM+2226bHt91110VfW+1oEREJEoVaUF5FHHIbXEdrtT3yOOF+KpxHwT96KOPypFFaYV8sP7ee+9N08JjKY7HdQwjjB9++OFF3ePjjz8GchE9Ro8enZ677bbbgPzND6V8wghA1aIWlIiIRKni08x976dwT5dC27JLcd5///302Kff+8JJkUrw/anCrcv/+c9/AnDxxRenaR5d36fohxHbffcBXwIglef7nu2///5VzolaUCIiEilVUCIiEiUrtDp7vhebNf3iOpckSYtHEFWeOSrPkhubJEmXltxA5ZmnxeUJKtNQU37n1YISEZEoqYISEZEoqYISEZEoqYISEZEoqYISEZEoqYISEZEoFRtJYjIwsRwZqTFrlug+Ks8MlWfplaJMVZ45+o6WVpPKs6h1UCIiIpWiLj4REYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYlSVSsoM+tvZoOrmYd6ovIsPZVpaak8S6vey7PsFZSZHWRmr5vZLDP7ysyeMrPty/2+88nLBDObk83LLDN7thr5aImYyjObn5PM7N9mNtvM3jOz9auVl+aKpUzNbI3gu+k/iZmdWum8tEQs5ZnNy2ZmNtrMppvZ52bWrxr5aInIynM7M/unmc00s/8rdz7KWkGZ2SnAtcClQEdgDeAmYO9yvu9C/CZJknbZn92qmI+ixVaeZvY74ChgL6Ad0B2YXI28NFdMZZokyafBd7Md8HPgR+ChSueluWIqz6z7gBeBDsCOwHFm1qNKeSlaTOVpZh2AR4GBwHLAAOAxM1u+bG+aJElZfoBlgVnA/gu4pj8wOPjvvwGTgOlkvlSdg3PdgHeBmcAXwGnZ9BWBx4FpwP+A0cAi83m/CUDXcn3mcv7EVp5kHm4+A3apdtnUS5kWeO8/AS9Uu5xquTyBb4BODd7v7GqXVS2WJ5kH0HcapH0AHFWuMihnC2pbYEng4SJe8xSwHrAy8AYwJDh3B3BskiTLABsDI7LppwKfAyuRecI4B0gW8B5DzOxrM3vWzDYtIm/VFlt5rp792djMPst2811gZrU08Sa2Mm3oMODuIvJWbTGW57XAYWa2mJltkM3j80Xkr5piK0/L/jRM27iI/BWlnH9MVgAmJ0kyr6kvSJLkL0mSzEyS5DsyTwabmtmy2dNzgU5m1j5JkqlJkrwRpK8KrJkkydwkSUYn2aq9gIOBtYA1gReAZ8xsuaI/WXXEVp6rZ//djUxX1K+BPmS6/GpFbGWaMrNfkflj8WCRn6maYizPx4H9gDnA+8AdSZK8VvxHq4rYyvNlYDUz65Ot8A8HfgYs1czPt1DlrKCmACua2aJNudjM2pjZ5Wb2sZnNINMdB5nmJ0AvMk3UiWY2ysy2zaYPBD4CnjWzT8zsrPm9R5IkY5IkmZMkyTdJklxGpkn7q+I/WlXEVp5zsv8OSJJkWpIkE4Bbs/esFbGVaehw4KEkSWY19cNEIKryzI6ZPA1cSKYl8lNgdzM7vhmfrRqiKs8kSaaQGfs6BfgPsAeZ1ujnxX+0JipX3yG5/tP9FnBNf7L9p8ChwHvA2mSajcuRaWau2+A1iwEnA58VuF9n4L80cVwk+349ylUG9VyeZJ6avgN2CNJOBR6udlnVapkG17QlM4awc7XLqJbLE+gCTG2Q9kfg8WqXVS2WZ4FrFwUmAruXqwzK1oJKkmQ60A+40cz2MbOlss3CPc1sQIGXLEPmD94UMn/8LvUTZra4mR1sZssmSTIXmAH8kD3X3czWNTML0n9oeHPLTOH9ZfZeS5rZ6WSeLMaU9pOXR2zlmSTJN8ADwBlmtoyZrQ4cTaZLpSbEVqaBnmRa9y+U4GNWTITl+UHmcjvIzBYxs1WA3sC40n3q8omwPDGzzbN5aA9cCXyeJMkzpfvUDVTgKeBg4HVgNpnZJU8A2xWo/dsBw8nMMJlIZoA4AdYFFifTVJ9KpgBfA7bPvu5kMk3Z2WSamufPJx+dgf/LXjcF+DvQpdpPSbVantlr2wP3Z9/jMzK/TFbtMqrlMs1e/wxwUbXLpR7KE9g5+9rp2bz8GViq2mVUw+U5NFuW08k8oK5czs9u2TcVERGJSi1NCRYRkVZEFZSIiERJFZSIiERJFZSIiERJFZSIiESpSSuUnZlpyl9WkiQNY1IVTeWZo/IsuclJkqzUkhuoPPO0uDxBZRpqyu+8WlAi9WlitTNQZ1SeVaAKSkREoqQKSkREolTUGJS0Duuvn9u1/emnnwagTZs2AKy55ppVyZOItD5qQYmISJTUgpLUoEGDAOjdu3ea1qFDBwAef7xmgpSLSJ1QC0pERKKkCkpERKKkLr5WqmPHjgAMGzYsTdtmm20ACLdgefvttwE46qijKpg7ERG1oEREJFLRt6B8evOyyy4732tOOOGE9HippZYCYIMNNgDgD3/4Q3ruyiuvBKBPnz5p2rfffgvA5ZdfDsAFF1xQimxHy6eQe1n84he/aHTN2WefnR6//vrrAEyZMqUCuRNpmaWXXjo9HjlyJACrrbZamvbLX/4SgAkTJlQyW9JMakGJiEiUqtaCWmONNdLjxRdfHIDtttsOgO233z49t9xyywHQq1evou7/+eefA3D99denaT179gRg5syZadq4ceMAGDVqVFH3r1U+bbxbt27zvcbLDuCFF14oe55EmsJbQiut1Dhm69SpUwH49a9/naZtueWWAIwfPz5NU09AbVELSkREoqQKSkREolTxLr7NNtsMgBEjRqRpC5oAUawff/wRgPPOOw+AWbNmpeeGDBkCwFdffZWmeddA2A1Qb8LYevfddx8AZo23Ytl3330BGD58eGUyVudOPfVUINeFDbDRRhsBcPDBBze6/v333wegc+fOFchdPDbeeOP0+MQTTwQKx3z073E4POB8klOnTp3SNP+Of/HFF2la+P+itfCJUIcccggAO+64Y3qu0HfttNNOA+DLL78E8odcBg8eDMCrr75answ2oBaUiIhEqeItqE8//RTIH6wspgUV1tzTpk0D8gdGv//+ewDuvffeFuWznhx66KHpsT99PvnkkwD8/ve/T8+FT5rSNP406q2A8OnUJ+UUaq2Gi6HdeuutB8C7776bpoUtgnq18847p8cLWhD+3XffAbmn+PC1Z511VqPrvYzvuuuuNK21TJII42led911AKy44opA/vfRp+KHE08GDhyYd6/wer/uwAMPLG2G50MtKBERiZIqKBERiVLFu/j+97//AXD66aenad27dwfgzTffBPLXLrm33noLgF133TVNmz17NpA/0HfSSSeVOMe16+WXXwZyE1Mgt4L+5JNPBtStNz+rrrpqejx06FAA1llnnUbXefe0RzAIu0PGjh0LwBZbbNGk91xkkUXy7lXv+vfvD+T/LXB33303AF9//XWa5tFPwjT/bj/zzDNArhsrvO7BBx8sYa7jtOiimT/lXbp0AeDPf/5zes6j67z44osAXHTRRem5l156CYAlllgiTfvrX/8KwG677dbofTyyTKWoBSUiIlGqWiSJRx55JD32Kece4WHTTTdNz/mgqT89easp9M4776THxxxzTOkzW2P23ntvIDe9NByQ/9vf/gbkYhBKvq5duwL5T6A//elPm/z6cFLD5MmTgfyneo+GcOeddwKw+uqrN7pHOEminnlLsW3btmnaxIkTATj33HOB/CUhbt11102PzznnHCA3eB/+ffAWWmv4rvsU8ttvv73Rueeeew7ITZyYMWNGo2vCSRUNW05hZBlv2VaKWlAiIhKlKKKZN6zRp0+f3uiao48+GoAHHnggTfNFuZKLWQjwq1/9ar7X+cLk8KloQXxMr1Arwhf01ZMzzjgDWHCryac7A5x55pkAvPLKK0DhBd/h1GYvz0ItJx8fDJcF1DMfG9pjjz3SNG+B+sLb448/Pj3n431XX311mrbXXnsBubHtSy65JD138803lyPb0QjHkrwl6b0lN910U3rOgxYUajk5b7EW4ounIX/8rxLUghIRkSipghIRkShF0cXXkA9uQi5kvq/Q90FsgGeffbai+YrZDz/8kB57mfm05bAr1KeaFuJTz0N9+/YFCsdG81hzYXdVLU5bDweFfdv7QjwKStgFN2bMmKLeq1DXnvMYiD65ot750hHvHoVcF59HiAiXlVxzzTVA4Vh8vtHooEGDypPZiPTr1w/IdetBLoKOT7f3rmeAOXPm5L1+ySWXTI/9ux+WqS+VuPjii4HqxuZUC0pERKIUZQsqnCrqkyPeeOMNIH/6r2+mFy4eu/HGG4HCsc7qWRgDzidJeMvJn/yh8dN5uIjXX9ejR49G9/f/J+Hkig022ADIXwjpMbp8unAt8JYg5BY1hnzBsz+lN7XVtPzyywP5kwB22GGHgveGXHzE1sInmxQavPfp+A899FCa5k/24e/2HXfcAeQvW6lH4SQonzgSloO3nPbZZ5/53sOn5/uuDpDrbQn57/OAAQNakOPSUAtKRESiFGULKvTxxx8DcMQRRwC5BY6QGwsIxwR88d8999wDFF7oV0+WWWYZANZee+1G53w/lzCy+0cffQTk9tYJw8z4At+wleXjfFdddRWQH3neF1iXcj+varjtttvSY19UGy51OOiggwCYNGlSUff1SPHhdGDni8sPOOCA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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "for i in range(10):\n",
    "    plt.subplot(2, 5, i+1)\n",
    "    x_y = X_train[y_train == i]\n",
    "    plt.imshow(x_y[0], cmap='gray', interpolation='none')\n",
    "    plt.title(\"Class %d\" % (i))\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "    \n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Reshaping and normalizing the inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:50.646294Z",
     "start_time": "2018-06-19T00:02:50.193290Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train.shape (60000, 28, 28)\n",
      "X_train reshape: (60000, 28, 28, 1)\n"
     ]
    }
   ],
   "source": [
    "print('X_train.shape', X_train.shape)\n",
    "\n",
    "if K.image_data_format() == 'channels_first':\n",
    "    X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)\n",
    "    X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)\n",
    "    input_shape = (1, 28, 28)\n",
    "else:\n",
    "    X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)\n",
    "    X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)\n",
    "    input_shape = (28, 28, 1)\n",
    "\n",
    "# the generator is using tanh activation, for which we need to preprocess \n",
    "# the image data into the range between -1 and 1.\n",
    "\n",
    "X_train = np.float32(X_train)\n",
    "X_train = (X_train / 255 - 0.5) * 2\n",
    "X_train = np.clip(X_train, -1, 1)\n",
    "\n",
    "print('X_train reshape:', X_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Define model\n",
    "\n",
    "#### Generator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:51.514030Z",
     "start_time": "2018-06-19T00:02:50.648356Z"
    }
   },
   "outputs": [],
   "source": [
    "# latent space dimension\n",
    "latent_dim = 100\n",
    "\n",
    "# imagem dimension 28x28\n",
    "img_dim = 784\n",
    "\n",
    "init = initializers.RandomNormal(stddev=0.02)\n",
    "\n",
    "# Generator network\n",
    "generator = Sequential()\n",
    "\n",
    "# FC: 7x7x256\n",
    "generator.add(Dense(7*7*128, input_shape=(latent_dim,), kernel_initializer=init))\n",
    "generator.add(Reshape((7, 7, 128)))\n",
    "\n",
    "# Conv 1: 14x14x128\n",
    "generator.add(Conv2DTranspose(64, kernel_size=3, strides=2, padding='same'))\n",
    "generator.add(BatchNormalization(momentum=0.8))\n",
    "generator.add(ReLU(0.2))\n",
    "\n",
    "# Conv 2: 28x28x64\n",
    "generator.add(Conv2DTranspose(32, kernel_size=3, strides=1, padding='same'))\n",
    "generator.add(BatchNormalization(momentum=0.8))\n",
    "generator.add(ReLU(0.2))\n",
    "\n",
    "# # Conv 3: 28x28x32\n",
    "# generator.add(Conv2DTranspose(32, kernel_size=3, strides=1, padding='same'))\n",
    "# generator.add(BatchNormalization(momentum=0.8))\n",
    "# generator.add(ReLU(0.2))\n",
    "\n",
    "# Conv 4: 28x28x1\n",
    "generator.add(Conv2DTranspose(1, kernel_size=3, strides=2, padding='same', activation='tanh'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Generator model visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:51.521078Z",
     "start_time": "2018-06-19T00:02:51.516058Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_1 (Dense)              (None, 6272)              633472    \n",
      "_________________________________________________________________\n",
      "reshape_1 (Reshape)          (None, 7, 7, 128)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_transpose_1 (Conv2DTr (None, 14, 14, 64)        73792     \n",
      "_________________________________________________________________\n",
      "batch_normalization_1 (Batch (None, 14, 14, 64)        256       \n",
      "_________________________________________________________________\n",
      "re_lu_1 (ReLU)               (None, 14, 14, 64)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_transpose_2 (Conv2DTr (None, 14, 14, 32)        18464     \n",
      "_________________________________________________________________\n",
      "batch_normalization_2 (Batch (None, 14, 14, 32)        128       \n",
      "_________________________________________________________________\n",
      "re_lu_2 (ReLU)               (None, 14, 14, 32)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_transpose_3 (Conv2DTr (None, 28, 28, 1)         289       \n",
      "=================================================================\n",
      "Total params: 726,401\n",
      "Trainable params: 726,209\n",
      "Non-trainable params: 192\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "generator.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Discriminator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:51.602831Z",
     "start_time": "2018-06-19T00:02:51.522937Z"
    }
   },
   "outputs": [],
   "source": [
    "# Discriminator network\n",
    "discriminator = Sequential()\n",
    "\n",
    "# Conv 1: 14x14x64\n",
    "discriminator.add(Conv2D(32, kernel_size=3, strides=2, padding='same',\n",
    "                         input_shape=(28, 28, 1), kernel_initializer=init))\n",
    "discriminator.add(LeakyReLU(0.2))\n",
    "\n",
    "# Conv 2:\n",
    "discriminator.add(Conv2D(64, kernel_size=3, strides=2, padding='same'))\n",
    "discriminator.add(BatchNormalization(momentum=0.8))\n",
    "discriminator.add(LeakyReLU(0.2))\n",
    "\n",
    "# Conv 3: \n",
    "discriminator.add(Conv2D(128, kernel_size=3, strides=2, padding='same'))\n",
    "discriminator.add(BatchNormalization(momentum=0.8))\n",
    "discriminator.add(LeakyReLU(0.2))\n",
    "\n",
    "# FC\n",
    "discriminator.add(Flatten())\n",
    "\n",
    "# Output\n",
    "discriminator.add(Dense(1, activation='sigmoid'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Discriminator model visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:51.608924Z",
     "start_time": "2018-06-19T00:02:51.604651Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d_1 (Conv2D)            (None, 14, 14, 32)        320       \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_1 (LeakyReLU)    (None, 14, 14, 32)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_2 (Conv2D)            (None, 7, 7, 64)          18496     \n",
      "_________________________________________________________________\n",
      "batch_normalization_3 (Batch (None, 7, 7, 64)          256       \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_2 (LeakyReLU)    (None, 7, 7, 64)          0         \n",
      "_________________________________________________________________\n",
      "conv2d_3 (Conv2D)            (None, 4, 4, 128)         73856     \n",
      "_________________________________________________________________\n",
      "batch_normalization_4 (Batch (None, 4, 4, 128)         512       \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_3 (LeakyReLU)    (None, 4, 4, 128)         0         \n",
      "_________________________________________________________________\n",
      "flatten_1 (Flatten)          (None, 2048)              0         \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 1)                 2049      \n",
      "=================================================================\n",
      "Total params: 95,489\n",
      "Trainable params: 95,105\n",
      "Non-trainable params: 384\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "discriminator.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Compile model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Compile discriminator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:51.697630Z",
     "start_time": "2018-06-19T00:02:51.611026Z"
    }
   },
   "outputs": [],
   "source": [
    "# Optimizer\n",
    "optimizer = Adam(lr=0.0002, beta_1=0.5)\n",
    "\n",
    "discriminator.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['binary_accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Combined network\n",
    "\n",
    "We connect the generator and the discriminator to make a DCGAN."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:52.080923Z",
     "start_time": "2018-06-19T00:02:51.699590Z"
    }
   },
   "outputs": [],
   "source": [
    "discriminator.trainable = False\n",
    "\n",
    "z = Input(shape=(latent_dim,))\n",
    "img = generator(z)\n",
    "decision = discriminator(img)\n",
    "d_g = Model(inputs=z, outputs=decision)\n",
    "\n",
    "d_g.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['binary_accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### GAN model vizualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T00:02:52.087799Z",
     "start_time": "2018-06-19T00:02:52.083174Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_1 (InputLayer)         (None, 100)               0         \n",
      "_________________________________________________________________\n",
      "sequential_1 (Sequential)    (None, 28, 28, 1)         726401    \n",
      "_________________________________________________________________\n",
      "sequential_2 (Sequential)    (None, 1)                 95489     \n",
      "=================================================================\n",
      "Total params: 821,890\n",
      "Trainable params: 726,209\n",
      "Non-trainable params: 95,681\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "d_g.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Fit model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T02:02:33.125417Z",
     "start_time": "2018-06-19T00:02:52.089965Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 1/100, d_loss=1.508, g_loss=10.259                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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autVZi73nb1GNxgZGZEkLVu2LLX985//lCRt2bIltU1PT0sq50UO9f51Oh0VRdEXeY6NjVXmJ/fKzc8cOC93ztjYmCTpVre6VWpbu3atJGn9+vU99XV0dFRSVZ5cw+fb5OSkpLw8m/ra6XTWFkWxvKdO1dAkzya4rIeHt71i2u12aluyZImkcv749Zk//z/wr5an1J81/3+NbtdO7nzep/67oii6fof29IFikSxfXo7TtddeK0naY489Utuf//xnSdLSpUsllYtYKhfkmjVrUhsT9vrrr59xfX6bu1b9dzu6FvfknNx5/qJ52MMeJkn65je/mdqWLl1aud9swGJcsGBBarvhhhu228fFixdLktatW5eO8bL829/+ltqQMbLya1133XXpOfzffn36IJVymZiYkCQdd9xx6dhHP/pRSdUJee6550qSdt99d0nSX//613Rsl112kVTOGfrmzzMbTE9PqygKLVq0KLUhu1WrVqW2v//975LKZ/O5uGLFCknSNddck9qQ1erVqyVJJ510Ujr29Kc/XVL5It7R/GRsGPOcPBcuXJjamHvdriXG8Prrr79CswTy9PnDvfzDyhxCnv68Bx54oKRS2ZOkI488UpL0jne8I90H/OEPf5CkNIZNazvXhpy8zfuK/OprxPv/j3/8I7X1U55S+aw+xrk1j0xzz0w/ve/Wz8o5fl5uzXP9XBv9Yt1K5drNyZQ++Dv0rne9qyTpV7/6VaX/3vcmhIsvEAgEAgOJ+EAFAoFAYCDR6sX/2W63i3nz5mnDhg2prVcfv10r/Y1bBbeH/x5T+IortlnYuFKk0r+JP18q/fdcy329mLFNLiV3ReCm2rp1a2q75pprNDU11ZcY1PDwcLFw4cJKf7qJ37kMMNv9Gh4T2hF8HHDTettVV10lSZo7d66kMiYiSTfddJOkqnwYE9zBHtPLxStvjj/1JQaFPN1F2U//PvNs3333TW2/+c1vJFXjKN0Aubir58Ybb5Q001/v/3d5+t/186enpy8oiuLuPXWqhjlz5hRLliypuGNy85N+MK718b35WqmNWN7mzZslVedPfbz8GW9961tLqrrgmuTOPHaXL/OXd5ivJeD9p29FUcxanjffr5iYmEhjffO1K//PodtYM8/s84pn9bXbDbjW7W53u9SGy75J7rk4vvd/cnKy67hzWFCBQCAQGEj0RJIA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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 2/100, d_loss=1.540, g_loss=10.217                                                                                                                      \n",
      "epoch = 3/100, d_loss=0.185, g_loss=4.543                                                                                                                       \n",
      "epoch = 4/100, d_loss=1.283, g_loss=1.491                                                                                                                      \n",
      "epoch = 5/100, d_loss=0.255, g_loss=3.804                                                                                                                      \n",
      "epoch = 6/100, d_loss=0.224, g_loss=4.351                                                                                                                      \n",
      "epoch = 7/100, d_loss=0.202, g_loss=4.537                                                                                                                      \n",
      "epoch = 8/100, d_loss=0.198, g_loss=4.560                                                                                                                      \n",
      "epoch = 9/100, d_loss=0.209, g_loss=3.746                                                                                                                      \n",
      "epoch = 10/100, d_loss=0.210, g_loss=3.917                                                                                                                      \n",
      "epoch = 11/100, d_loss=0.233, g_loss=4.561                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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HdW+ZyXm3H///aFNFpQ+iy+++CL06fGpp54a2o466qju3WwdsAVljDEmS7xAGWOMyZK2akxIHzKL+GBpbWn18VRQ+vXXXw9tk046KQAbbrhhaLvllluAhrj2Hmpvb1+mJxfo7nimrv3VVlsNgO+//z60PfDAAwAMGjQIgPPPPz/0zTrrrAC8//77AMw333yh78svv+zO7dSKHo8n1H+ObrbZZgCMGjUqtE088U+RHI2f/g8w2WST6b5C24MPPghEd3W9XKtd+c7bgjLGGJMlLZdmnq70Cgimu7PK1T5VBNDfps831aExB5hxxhkBWGuttULbb37zGwAOPvhgAJ5++unQV2OlhCzQnFKQefrppw99Bx54IAA333xzaOuNY1BJukPfZ599AFhjjTVCm75/E000UeHflJlmmgmI8wjgsMMOAybMZInxMfnkkwNw4oknAnDJJZeEPo3he++9BxR//wYMGADArbfeGtqWXXbZwr+yeJuBLShjjDFZklUMSrvzdEelXbp2qEOGDAl9et5XX30V2pQ2Kb2u6aabLvTJ37rQQguFtg8//LBb99rqMZOpppoKgC233DK07brrrkDR1//2228DsNhiiwEw55xzhr477rgDgJNOOim0vfDCCwC8+eabAHz33Xddup9WHU/FTF555RWgaLHPP//8QBzDBtO0GFTKb3/7WwDOOeec0Pbxxx8DsPnmmwNRnxDg3HPP1WsDxUOlc8wxB9C0g7pZx6BkQZ133nkADBs2LPSl2oXjYvjw4eHx3nvvDcTvcPr51NID4BiUMcaYlsULlDHGmCxpmosvTXaQG+CYY44BYPbZZx/n89O/072nKbuS35fLZe655w59cvddc801oU1B/WoTJ1rBJaWxWnjhhUPbWWedBcBKK600zueXoTGW2Q+w8sorA/Dqqz2vRJDbeJbNs7K+Sy+9FIChQ4cCsOeee4a+008/vfTvG0QWLj65ni688MLQpqD9M8880+H5f//73wHYdtttgaKLeJ555gFisL/BZO3iE3IxV+uK+7//+7/w+Pbbbwfi2CthBeCzzz7r6S0G7OIzxhjTsjTEgiorOnbdddeFNulvlVlJlaT3q119GpjWqq9/tYODmP6aXmPkyJEA7LTTTkBx56Hrphaa/ja3HX8ZshhffPHF0JamQUPxkORpp50GFA9HSjNOaasXX3xx6Kvl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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 12/100, d_loss=0.232, g_loss=4.252                                                                                                                      \n",
      "epoch = 13/100, d_loss=0.205, g_loss=4.217                                                                                                                      \n",
      "epoch = 14/100, d_loss=0.197, g_loss=4.614                                                                                                                      \n",
      "epoch = 15/100, d_loss=0.207, g_loss=4.333                                                                                                                      \n",
      "epoch = 16/100, d_loss=0.235, g_loss=4.581                                                                                                                      \n",
      "epoch = 17/100, d_loss=0.192, g_loss=4.847                                                                                                                      \n",
      "epoch = 18/100, d_loss=0.215, g_loss=4.249                                                                                                                      \n",
      "epoch = 19/100, d_loss=0.189, g_loss=5.171                                                                                                                      \n",
      "epoch = 20/100, d_loss=0.219, g_loss=4.342                                                                                                                      \n",
      "epoch = 21/100, d_loss=0.203, g_loss=4.449                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 22/100, d_loss=0.221, g_loss=3.718                                                                                                                      \n",
      "epoch = 23/100, d_loss=0.281, g_loss=3.686                                                                                                                      \n",
      "epoch = 24/100, d_loss=0.220, g_loss=4.132                                                                                                                      \n",
      "epoch = 25/100, d_loss=0.212, g_loss=4.788                                                                                                                      \n",
      "epoch = 26/100, d_loss=0.202, g_loss=4.141                                                                                                                      \n",
      "epoch = 27/100, d_loss=0.196, g_loss=4.862                                                                                                                      \n",
      "epoch = 28/100, d_loss=0.533, g_loss=2.778                                                                                                                      \n",
      "epoch = 29/100, d_loss=0.191, g_loss=5.374                                                                                                                      \n",
      "epoch = 30/100, d_loss=0.184, g_loss=5.472                                                                                                                      \n",
      "epoch = 31/100, d_loss=0.201, g_loss=4.777                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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Sm4aLSLJjyUpj4wdOxYo74v06dMHgM8++wzoulVVM4znXHPNBcCLL76Y2qaaaiqgsGI0hgBPP/00APfff39qGzBgAFD8Jpdeemnqk3X17bffVnVe/0PCO7y1tXXFqt6o/ftmf7/LOp155pkBmH322VPf8ssvD5Sv56uvvnpiP6rT4wn1G9N4TSyxxBIAXHnllQAstdRSqU+WfwyFWGaZZYDydd4VOFmsMcaYpsUTlDHGmCzJUiQhtwnAggsuCMCuu+4KlM3TpZdeGoCHH344te23334AjB49usvPM3cWW2wxAO64447UJpedXEHRJSW3QGxbeOGFARg+fHjXnmwTsNBCCwHlzA3aZJZb7plnnkl9EkB88MEHqU2ulAMOOACAvfbaK/XJFXXUUUelto5k8shhM7szRHeUZPprr702APPOO2/qm3baaYHiWQCFq1pjEAUjldDv8+yzz3b2tLNEz87BgwenNol6NLavvPJK6hszZgwAK620Umo7/fTTS3/XyGwytqCMMcZkSVYWlFY/W2+9dWrTxt74Vkb9+/dPx08++SQAp512GtD8q8uJYc011wTguuuuA8obx1rBa9VaSRbdu3fv1KZx3HjjjUt/35OQxfR///d/QPla1JhpsznyxhvjatxF0cPZZ58NwFdffVV6T4BDDjmk9HcAF154IdC9rmONmUQnurYATjrpJKB8zbb9u4jGRf/G1b7aoqx6yJAhACy66KJA8Ts0O1NMMQVQWIYLLLBA6nvooYcA2HfffQF4/vnnU58srtdeey21LbnkkkBxnduCMsYYY9rgCcoYY0yWZOHi00Zzv379gPIGX9v4kk8++ST1vf/++0A5F5m0+3rPCZmnlVxdzcgMM8yQjm+77TYApp9+eqD83TQecgnEvkpR5aussgpQuGFuueWWWp52tmh8AEaMGAHAPPPMA1R2NT344IMA/OpXv0ptlfIXvvfeewCceuqpQBFzArDVVlsBhRsQ4L777gOad1NfYxXHbNlllwXg+uuvB6Bv377t/k7X5ccff5za5I6L97SeB7r+5TaE8m8o5p57bgCGDRsGlMe/mZ8B+h5y7UXh2KabbgoUIpz4W2y00UYAzDLLLKlNop4olmoUtqCMMcZkSRYWlOS7EkRo5Q/FKvQPf/gDAKNGjUp9Wkmde+65qe2iiy4CihVElPhWoplXTVBYPaec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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 32/100, d_loss=0.201, g_loss=4.917                                                                                                                      \n",
      "epoch = 33/100, d_loss=0.207, g_loss=5.085                                                                                                                      \n",
      "epoch = 34/100, d_loss=0.187, g_loss=5.238                                                                                                                      \n",
      "epoch = 35/100, d_loss=0.207, g_loss=5.495                                                                                                                      \n",
      "epoch = 36/100, d_loss=0.194, g_loss=5.161                                                                                                                      \n",
      "epoch = 37/100, d_loss=0.196, g_loss=5.639                                                                                                                      \n",
      "epoch = 38/100, d_loss=0.196, g_loss=5.217                                                                                                                      \n",
      "epoch = 39/100, d_loss=0.190, g_loss=5.675                                                                                                                      \n",
      "epoch = 40/100, d_loss=0.210, g_loss=4.506                                                                                                                      \n",
      "epoch = 41/100, d_loss=0.213, g_loss=6.299                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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zMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS26gzMwsS5N054vb2toq9bqRZlOpVNp6+x6uz4Lrs+beqVQqM/bmDVyfJb2uT2iOOm1r+99HsVKp76125TPfrQbKzJrGmL6+gRbTkvW55ZZbAnDiiSemsuOPPx6Ab7/9tsM1lTWKp/jMzCxLbqDMzCxLnuIzs7rTugbUf23Dum7NNdcEYMYZi+W1I444AoCHH34YgLPPPjtd++ijjxp4dx5BmZlZpjyCMrO686gpH7PMMkt6rSCJGPzwl7/8BYBjjz0WgC+//LKBd1fmEZSZmWXJDZSZmWWpZaf4GrXZzJqXnpG4gP/dd9/V5D0BfvCDHwCw0047pbI999wTgG+++QaA008/PV3T60bvNWklsf7XX399AI4++uhUNs888wAwevRoALbYYot07YsvvmjELfa5k08+Ob3+4Q9/CMCYMcU2r3PPPRfo26k98QjKzMyy1DQjKPWMZptttlQ2dOhQABZeeOFUptfqhX711Vfp2q233grAiy++mMruueceAEaNGgU074gr9hwnn3xyAOadd14Axo0bl66pl6h6UU9+QlSL37Xq/ec//zkAF198cbo2/fTTA+VR2UQTlfuEsTerBetVV101lU3Iv5/vE5/1SSedFIABAwYAcMEFF6RrM888c4evlymmmALIY5TQKNNMMw0Aa6+9dirT34HVVlstlcW/F33NIygzM8tS9iMo9ZB23313AI477rh0TT2j2EP98MMPAXjuuecAWGyxxdK1X/ziF0C5F7vOOusAcMMNNwDw8ccf1/YHaBDVExTrHPvvvz9Q9JygqCuNMJ999tl0TXV87733prIJYT2kqyMpPW+zzz57KrvpppsAmH/++UtfU+3fVfue8dqSSy4JQL9+/VJZXBuY0C200EIAnHDCCalMPX+t98X6rLYOrRHTK6+80uFaq9Om3KmnnjqVXX755UBRH7nxCMrMzLLkBsrMzLKU5RRfHKZvuOGGQDG1F6fnzjrrLAD+9re/pTINVfV1GvoD7LfffgAMGTIklfU2rDgXMRhkzjnnBIqpvUkm+f5f8+KLL55e33HHHQC8+uqrqeywww4D4JZbbgHg5Zdf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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 42/100, d_loss=0.190, g_loss=5.632                                                                                                                      \n",
      "epoch = 43/100, d_loss=0.196, g_loss=5.688                                                                                                                      \n",
      "epoch = 44/100, d_loss=0.197, g_loss=4.805                                                                                                                      \n",
      "epoch = 45/100, d_loss=0.186, g_loss=6.000                                                                                                                      \n",
      "epoch = 46/100, d_loss=0.192, g_loss=5.773                                                                                                                      \n",
      "epoch = 47/100, d_loss=0.209, g_loss=5.290                                                                                                                      \n",
      "epoch = 48/100, d_loss=0.215, g_loss=4.870                                                                                                                      \n",
      "epoch = 49/100, d_loss=0.191, g_loss=5.935                                                                                                                      \n",
      "epoch = 50/100, d_loss=0.209, g_loss=5.643                                                                                                                      \n",
      "epoch = 51/100, d_loss=0.201, g_loss=5.833                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztnXWUXEXah58hYXF3DQmuy+IQWOxgiy++2OKwOAcJzuKui4XsAosEPbgsEOAEWBYJENwhuAQNLunvD75f3benO5Ppme6Z6pnfcw4nl6qe29XVdbvq9ZZSqYQxxhiTGxN09wCMMcaYaniDMsYYkyXeoIwxxmSJNyhjjDFZ4g3KGGNMlniDMsYYkyXeoIwxxmSJNyhjjDFZ4g3KGGNMlvSt5cUtLS1OO/H/lEqlls7ew/NZkNt8trQUw2nSbCujS6XSDJ25gddnGZ2eT/CcRtrzzNe0QRnTE5lggkKRoM2ob9/i0fjll1/K+nJGG2upVBrVzUPpEeQyn3GNjh07thtH0rVksUGFRdDNIzG9kfjwazP6+eefu2s4xlQQD0w//fRTN46ka7ENyhhjTJZ4gzLGGJMl3abii0boySefHIBvvvkGsKqvNVJB9Sbdc1citV5PwM9Ofemu+dTvo/7tSWu0FixBGWOMyZJuk6DiyWTMmDHdNYyaaWlp6fJTlSUnYwp22GGHdD1kyBAARo8eDcCss86a+n799deuHVgd0W9Mb5eILUEZY4zJEm9QxhhjsqTLVXytjX8A0047LQCff/45UB+VVry/qIe43NtFbmO6i2233RaAc845J7XpOddvyPTTT5/6Pv744y4cXdfTG4J3LUEZY4zJki6XoKoZ/2TgrCb1iGqS1zTTTAPAeuutl9oWXHBBAHbccUcAvv/++9R39tlnA/DRRx+ltuuuuw5oboOqMT2VXXbZJV1feOGFQPlvgK71nH/99dddOLrG0Z7sOvXU5kwxxRTpuq1wn64OebEEZYwxJkuyyMUnSeiEE04AYNFFF019ykH1+OOPA7DZZpulvgknnBCAqaaaKrX16dMHKHb46aabLvWdeuqpQHkuq7nnnhuAE088sezvjOkI8XQ/YMAAAOaaa67UdsEFFwCw0047ATBixIjUF6X91vfTv71lfc4555wAHH/88amtrdP7l19+CfQcG7E+h773aG+StqejnzWuUf3+/fnPf05tV111FQDvv/8+AL/73e9Sn35DDzjggNTWyDVpCcoYY0yWeIMyxhiTJd2m4pNoCTB48GAAVl11VQC+/fbb1CfRfZFFFgGKvH2RKOqOGvVb2Zb33nsPgMUXXzz1TTzxxABMMskkqe2QQw4B4J133gHgiiuuqHrfZqSaY0lvURF1NZrjqaeeOrWtscYaABx++OGpTW7Qd9xxBwC33HJL6ttrr70A+O6771KbVDszzzwzUO46/eOPP9bvA2SCVPp77703UK6ir6bm1DN66aWXAj3P2Umfrx7PrUwhV199dWrT9eWXX57aWrvnr7nmmulaa7oth7Z6YgnKGGNMlrTUIiV0tFxx3G1XX311AG688cbUJqnorbfeAuCggw5KffPOOy8Ahx56KFB+QtWpQlITFJLWDz/8UPHec8wxB1AuJa2wwgplr998881Tn0651citRHlEziMbbLABAEceeWTqk0v/Y489pjFU/H08QUmCXW211QDo379/6ttwww0B+OKLLzo95kbP56STTpquNT9ySe6MpKz7rrPOOkARygAwyyyzVBvjOP9fUnwMm5ChetlllwVg3XXXTX0yVI+juOKIUqm0VHs/RzXamk85I0HxHNZD46CA26effhoontn/Hw9QLjlqrepk/+qrr3Z6DOOg0/MJbc9ptcDbOM+iPVKi1jgUoTenn346AMstt1zqkzOKnvOIXnf99dentmWWWQaADz/8cLxjGB/teeYtQRljjMkSb1DGGGOypEucJCabbLJ0fcYZZwAw5ZRTprZ3330XKHzxn3vuudQ322yzlbUdfPDBqU+R5bfeemtqk6quGm+//TYAG2+8cWobOXIkUKTpHzRoUOprS8WXM0cddRRQqIDkHBKRQ0q1qPxokJXaQWqF+PoZZ5wRqI+Kr9HEGCMZ4usRR6K4vIsvvhgojxlpjyE5qmvkvPPXv/41td11111AoVrdcsstU59iUvT8dCVx3Foj9ZjPk046CShUfbFPRfviHOu9V1llFaChKr6GU80RolanD83X7rvvntpOPvlkoFj3W2+9deqrptrbYostgEJdLUcyqI9qrxYsQRljjMmShkpQMvDddtttqW2xxRYDyk9b5557LlD9JKgdW/8OGzYs9cWMELUgRwEopI1LLrkEgN///vepr5lKrcdsBcpSoJNmnGvN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UY/ciGDBSSedFIBFFlkktZ177rkALLzwwqnt7bffBmCFFVYA6nsqiTTKZpK7BHX33Xen67XWWguAr7/+OrXNMsssAHz33Xc13bdR86mTZFyfueaMk73lpZdeSm0TTzwxAGussQYA9913X3tvl70NSvam+HknnHDC8f5dlKDmnHNOAD766KM6j66CutmgqrQB9Xnmda/NN988tV1xxRUAbLPNNgBcd911nX6femAblDHGmKbFG5Qxxpgs6bSThMTSeqqkojrmjDPOAGCfffYBitoz40IqQBmTl1566dQ3alT+GfMbodqLKlAZ4B977DEAvvrqqzb/ViqXww8/HCjUepFLL700XX///fedG2ydqae6WerCat9RR7+3KaecMl0/+uijQKHWA3j66acBGD58eIfunyN6hiebbDKgfM2o74cffgDgkUceSX0DBw4EyufnnHPOAWCLLbZo4IgbSz2f+RlnnBGAf/zjH6nthhtuAOD666+v2/t0FZagjDHGZElWufjkWnrnnXemttVWWw0oTq8//vhj6vvmm2+AckcIGU1nmOG34pdnnnlm6ttkk00aMexskeT0v//9L7XJ2eSLL74Ayl2a49yKVVddFYDDDjsMKD/tvfPOO0D5HOfm3KF1E91u5W7bXuabbz4ATj75ZKBcIpXLbnS1bw9a6yeddFJq05qVdAuwyiqrAD3LbV9OKi+88AJQvgYlTUnyjdqUhx56CIDll18+tem7Mb+h5zSGg5x66qlAfs9me7AEZYwxJku8QRljjMmSLFR8ip1RZgLFfESkzttrr71Sm7IW/O53v0ttN954IwDrrrsuAKuvvnrF+3z44Yd1G3uOSJ117LHHAkWkekTifrVic/H1//73v4HCWSI6miy11G9hIaNHj+7wWCeccMKaVW61IFVRrc4SMjZDoYqSAf/9999PfVpTtar45MyjEghQqL4OOOCA1CZngZ6IPq+e7WrMPvvs6XqxxRar6I9z1azUIw5KzjY77rgjAJdddlnqGzlyZMcH181YgjLGGJMlXS5ByUV0q622Sm0ysk811VQVr9epQieCa665puI10YB80EEHAYXxOrrx7r333gAcddRRqa2Rp/fuYp555gHKc24JzeeQIUPK/j+y3377peuZZpqp7HV77LFH6vv88887PdZcy4VrfqCQYl5//XWgPJt2zILQHrTGH3jgAaB8/k888UQAnnjiiQ6MuGcgKVWSwCmnnJL65JYen9nnn3++C0fXGOrhvLD++usDxe+rwnPqdf/uwhKUMcaYLOkSCWqiiSZK13fddRcAK6+8cmqTDlZ2ghi4d+GFFwJw8MEHl71mXPzhD38o+//opio38yOOOKK2D9AERDfqo48+GoBJJpkEKJ8znayOOeYYoPx0pbnadNNNK+6vfHs6+be+b09BtqdoB5V780YbbQTUnmcw5peT9CU34GgPVY60XKXKRhEzl+t533nnnYHqp/+47hZffHGgyFHYzNJCrcR5kwSl8JFabaLVkDSrnIlQ2Pb1TACMGDECaMzcW4IyxhiTJd6gjDHGZElDVXxSbSgXFBSqvah6++STTwC4+uqrAbjnnntSn8o7tCU+RucK5YqrljdNxd96ompqgQUWSNet85INHjw4XR966KFA9ZITu+++e8W9NH/nnXceUJ+MBvG779OnT1aOKspMEN27lQeyVtWeVNtSp0K5gwWUO2PInb23oKwmL774YmpTJhitieiE0r9/f6DIWQjw+OOPA/mXqWkEyjwCsPHGGwNFAcdan9P4TOr39OyzzwZgu+22q3hdVEMrs4dUffXEEpQxxpgsaagEJVfRmAE77tRC7rvXXnstUJyKoO0TkVygo+u5cpeJKClMM800QHlG9FyL19XKZpttlq71+RQAqYzPUPl5Y1Cugh6jU4vy85111llA/aXP3KRZSfMxG/S7777boXvJSWXLLbdMbTJs33rrrUDh0AI9+/Qf19QOO+wAFJJpv379Kl6vLPtxfuTc9PDDD6c2hZFI4q2WT7KnMu+886ZrJSuIBUXbgzRNSyyxRGpTdQJ9L3K8gEK6ir+hH3zwQU3vWdP4GnZnY4wxphM0VIIaNGjQb2/St+23WW655YDC9hRrFN12221AUdI5SmCyZ/3xj38c571jGpUVV1wRKGwtAOeff/54PkVzEO1wOolLj7/eeuulvtdeew0oTk7SXQMMGDCg4r5vv/02ULv9pS2ipJCD1CBJB4o5iBnL55hjDqBwt/34449Tn+xG1VIS7bTTTkBhV4FCgl1mmWWAQoqA4qQqTQI0v0SguXvyySdTW0wjNS7khq9UW1BIYTGURNm7JZUNHTq0kyNuHqppgqaffnqgfI22xfbbbw8U7v1Q/F6rftTf//731HfaaacBsPbaa6e2Rq5RS1DGGGOyxBuUMcaYLGmpRcXS0tLSrhdLDSdV3RRTTNGBoVUnuk/GLOat0eeKKkFlqLj44otT2/7779+hcZRKpUpvjxpp73y2h5i1XQUf5eYfHRGkCpBKKqqmqqle5Pq/7bbbVtyrnnTHfCq3WyyQKZfZmJnjyy+/BAqHkqiylhpVcx3XZyxNPi6qqTtjmMWf/vSnite1kxGlUmmpWv8oUo/1qYwcN998c2qTe7lcleN8tnaiqjY/8TW6/vTTT4Fyh4uYkaajaB2MHTu20/MJjXvmlUljgw02AArTSDXifCszf3z2L7roIgD23XdfoHxNzz///AC8/PLLqU2Z+WsNk2jPM28JyhhjTJY0xElCJx3lfYsujM8++yxQftK56aabgCILt04BUOTaim6qbaFTmYz7sZy0pIdotO4pAX7Dhw9P18oZd+SRRwKw9NJLpz6d+BW0HE9OMrDGE6rmLDd38Hqgk7zWHRSSUFwP00477Tjv0XpdRqlJ92grn5zc2qEIho7SRrOvS2VmVygJFOvs3HPPLft/gG+//RYoyt5LMoLCSSU+vyeddBIA0003HQCbb7556lO9uM6Q87rXbxwU41QlAuU8heKZlzNQdEVXsO+VV16Z2qpJTkLSUuyL31G9sQRljDEmS7xBGWOMyZKGOEnUEzlCKGL89ttvT33LLrssUK4Gke++YlCij76Mg9ExoKMqlEYZ9aupHIOhtqb76/PGeAmJ+1LdqQQJlOdMFMrDdcUVV9T03rXSHU4SUscpPg6KeDLF70AROyZVYFRPqwyJvi/F5UAx/zHSXkUz77///rK/bwBZOEmEe6Xrzqoto0rwqaeeAorvS84CUF4ypQ5k5yQR1clSs0ltHdX6iolSYdioBlV86VxzzZXaWsc1xd8PqQf1TADsueeeQO3fq50kjDHGNC1dXvK9VmSMk8t6LMSlaPzPPvsstSlLRMwgIZqhENz4CrTVgqSltrKFx5OWiPn6GpGhOBckSUuagdrnWpKB8k1Wc5mOBmvl4MvZ+N4I6unsEecuSlPQtkNLTyNqgo4//nigcBoZNmxY6jvooIOAwqU8hlUoA0db2SBi5g5pG2J4TiMdeSxBGWOMyZLsJSihMuQxM7R27hNOOCG1KaiyUbS0tDS96y8Up3u58UeizeTVV1/tsjF1F52RZhTsq4zxMcB39OjRAJxyyil1eS/zG7E+UcyjCOXSf0dtt82IgmuVW3OppQpzmWqQKdwnBjBX+y3Tb4Pc+qPd/7///S9QrO1GYwnKGGNMlniDMsYYkyXZq/gU6ax08NFdVVHqsSBfo9Vv3anek8oiqpE6Wi5dqpGBAwdW9EXxvSeoMxuJVM5Sh8T5UoG9N954o+sH1o1I7QmwwgorAOWZToQcoJS9Awonk2p59Oabbz6gKBEBlfn5YtmI3qDaE3IiW3/99QHYeeedU5+cJOQaHrN6SJ1/xx13pDbNpQrORucyFYvsTPaIWswklqCMMcZkSZYSVMxvJpdIBVBWO6H2llO5/hVnAAADFElEQVS+ToT1OBkqd1lrIzOUn3Zbl4g35SjXo4IZo+vvVVdd1S1j6m5iEczBgwcD5VK/pCTl3YtrUO7O6nvllVdSn0IiYhUDnfa1Tm+55ZY6fYrmRJLNySefnNoUKnLjjTcC1Qu8PvPMM+lauVGfe+45AIYMGVLxulp/c1tnqW8vlqCMMcZkiTcoY4wxWZKlim/RRRdN10suuWRZ30svvZSu5ZPfE6kmEtdTlfmXv/wFKM+zJcP0NddcU7f36YlEFZPmUd9NjBn57rvvunZgmRDLhZx++ulAeYYHqfuUXzMihwkVh5xpppna9Z76Xfjiiy86MOKeR/ytUAHM/v37A+VxowcccABQqFQj+g2KKkHl/6vVzNDR3y5LUMYYY7IkKwlKxtOtt946tWkXl0tq7OvJJ9RGOX7o9DrrrLNW9Mn9dOTIkQ15755CnDuFQWidxpNob3JzjsQ5kGu4srhDkS9T8xgdKNpDlJIuueQSoMhB11scpjqCwkd22223mv4uOkqNGTOmrmMaH5agjDHGZEmWEtSGG26Y2nQiksvjiy++WNFnake1jeIpX1JAtLFUC5js7ai+DhSSvaT5oUOHdsuYciI+l6p3Fe0eKvW+zTbbAOW5CuVyrpN6tJGq9tOaa66Z2upZoaBaILw+S1eEW0S7c+s8gnFMXRX6oc++4IILpjbVj4rPgLOZG2OM6XV4gzLGGJMlWZZ8jyompYh//PHHgXwMz91RoryeqBx2LKanwn1ynYauS6vfrPOpefzwww8BeOGFF1JfN6ugsyr5nitRrdZWaEepVOrSku9SbUqdF8fWU0wbLvlujDGmaclSgmoGmvXE35pofO1O6bSnzGdGWIKqL10qQfUGLEEZY4xpWrxBGWOMyZKs4qBM15OL04kxxrTGEpQxxpgsqVWCGg2MasRAmox+dbqP5/M3PJ/1px5z6vks8BqtL+2az5q8+Iwxxpiuwio+Y4wxWeINyhhjTJZ4gzLGGJMl3qCMMcZkiTcoY4wxWeINyhhjTJZ4gzLGGJMl3qCMMcZkiTcoY4wxWfJ/7qZtrqpmX6oAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 52/100, d_loss=0.203, g_loss=4.273                                                                                                                      \n",
      "epoch = 53/100, d_loss=0.212, g_loss=5.507                                                                                                                      \n",
      "epoch = 54/100, d_loss=0.201, g_loss=5.222                                                                                                                      \n",
      "epoch = 55/100, d_loss=0.239, g_loss=6.511                                                                                                                      \n",
      "epoch = 56/100, d_loss=0.250, g_loss=4.552                                                                                                                      \n",
      "epoch = 57/100, d_loss=0.197, g_loss=6.627                                                                                                                      \n",
      "epoch = 58/100, d_loss=0.243, g_loss=6.615                                                                                                                      \n",
      "epoch = 59/100, d_loss=0.236, g_loss=5.297                                                                                                                      \n",
      "epoch = 60/100, d_loss=0.261, g_loss=7.395                                                                                                                      \n",
      "epoch = 61/100, d_loss=0.226, g_loss=5.566                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3XeYVNX9x/H3IopdsWJFxN5rlNg1tkdNxFgSG6ixRSyJNWqMNYiIJbbYosbHbmJsj0aw9xINxoIiKooFsXdF3d8f/j7nnjs7LFvuzJw7fF7/OJ67zN49e3fO+Z7yPS2tra2YmZmlpkejb8DMzKwaN1BmZpYkN1BmZpYkN1BmZpYkN1BmZpYkN1BmZpYkN1BmZpYkN1BmZpYkN1BmZpaknp354paWFqed+H+tra0t3X0P12fG9Vm491tbW+ftzhu4PnO6XZ/gOo115G/eEZRZcxrf6BtoMq7PBuhUBGVmtdejR9Zv/OGHHxp4J9bS8mMn3zlLG8MRlJmZJckNlJmZJclDfGaJWGmllQB48803Q9lHH33UqNsxYLrppgPgu+++a/CdTJscQZmZWZIcQZkl4tlnn230LVgFR06N5QjKzMyS5AbKzMyS5CE+65Dll18egFtuuSWUTT/99ACsssoqoezDDz+s743ZNEd7kwBmmGEGAL799lugHPuVWlpaSnGfvXr1AuCbb74p9H179uzZ4aFTR1BmZpakhkVQcS+oDL2JMunTpw8Am222GQBzzz13uDZgwAAAtt12WyA/CfzZZ58BP/ZwZLbZZgOyjAaKmiD7vf36178OZZdffjkAX3zxRQE/SePEdTDPPPMAsPfeewOw4YYbhmuvv/46AMOHDwdgzJgx9bnBadCxxx4LwAknnNDm2siRIwHYcsstQ5k/V37UkWwYWk4PMHDgQAAuvPBCAPr37x+uffzxx92+n84sPHEEZWZmSap7BKXe/JprrhnKdtllFwAWXnhhAK655ppwbd999wVg4sSJQNabBbj++usBuO6660KZeu6ff/45kI1NT0suuugiADbffHMgG6evJo6IZppppil+3ffffw/k88SpjhdccMFQVoZluepRKtI88cQTw7VFFlkEgLXWWiuUzTLLLEAWVVWL/nfeeWcABg8eHK7dc889QD6a1Hi+3qMM9dUIqp911lknlCmCip9BUVS76KKLhrLx49PM71rLyE51M2TIkFC26667ArDddtsBMGHChHbfY+jQoUD2vDdyNMQRlJmZJckNlJmZJamlM+FmEYdtaaJ52LBhoWyOOebQ++f+G9N9Vrv29ddfh9eazB87diwAo0aNCteOOuoooJhhldQO2JtxxhnD608++SR3TYsfIBuq06Sohq8AvvrqKyA/7PfBBx8AMO+8P57V9u6774ZrO+20EwCjR48OZZMnT+7S/dezPhdaaCEA/vvf/wL5RSTVnq/2VD6X8fEYuvbGG2+Esquuuip37cknnwzXbrvttty1bvpPa2vrGt15g0YerrfRRhsBcOONN4ayueaaC8ieU8iGrzW0peEpgGOOOabIW+p2fULt63TppZcG4MUXXwxlGqJbZpllAHjrrbfa/Ls555wzvH700UcBuPbaa4H8EHiRw5M+sNDMzEqrLosk4gnnc889F8hP3KtXrwnkcePGhWt9+/YFYOaZZwbyE6RqzastAlh22WWB/BJJLQG+9NJL27xH2cVRpLJia4l4PFmsHv5iiy0GwE033RSuXXLJJUC2KReyzXqKRM8777xwrUx1Fz83ilq04Cb+ORR9xr3MV155BciW7cd1PeusswLZhHK1CXw9wwCHH3547nu+9NJL4dpjjz0GwKRJkzrxkzWX1VZbDch673HP/r333gOyv23IFgIpMl1//fXrcp+p0mhJ/Eyfc845QPXISeKFEFo8pCiskX/njqDMzCxJbqDMzCxJdRni0/4FyIbjNKwHsNdeewHw+OOPA1koD9kwjCZGDznkkHBN6/njIUTth9C/0xAMZBP9ZRqa6op42KiSJvNVF/EepuOPPx7IT/SvvfbaADz11FNF32bD6BnUc6AhPMgm1rVgAbJnb6uttgLyhwiuu+66ABx88MEAzDfffOFatWE/DZmqjq+++upwbVod2ovrR8+g6jF+Fk877TQgn81gm222AbLnOt5fufjiiwPw6quv1uCu01K5SCSu0zh/5pTEw9BatKahvkZyBGVmZkmqaQSlJcyrr756KFOv9YILLghlmuBUVBVHOJXZsQ899NA23yfOm3bggQcCcMoppwD5BRSKuKa1PIBxb0rL+3/7298C+Rxcygzxl7/8JZQ9/fTT9bjFmot74iNGjADgyCOPBPJLveNlzdK7d28gi5IGDRoUrumQQS3HP/nk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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 62/100, d_loss=0.207, g_loss=4.339                                                                                                                       \n",
      "epoch = 63/100, d_loss=0.185, g_loss=6.388                                                                                                                      \n",
      "epoch = 64/100, d_loss=0.255, g_loss=4.887                                                                                                                      \n",
      "epoch = 65/100, d_loss=0.234, g_loss=5.585                                                                                                                      \n",
      "epoch = 66/100, d_loss=0.288, g_loss=4.290                                                                                                                      \n",
      "epoch = 67/100, d_loss=0.234, g_loss=4.920                                                                                                                      \n",
      "epoch = 68/100, d_loss=0.260, g_loss=5.798                                                                                                                      \n",
      "epoch = 69/100, d_loss=0.225, g_loss=7.796                                                                                                                      \n",
      "epoch = 70/100, d_loss=0.287, g_loss=5.713                                                                                                                      \n",
      "epoch = 71/100, d_loss=0.202, g_loss=6.775                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztnXeUXMXxtp8VYDIiJ5OzMSZHH+lHDiYnkXMwQUQRLB8yxgJsTBQYk22wSMbknINJIoPJBgQiJ5Ez+/3B9/atuxqtZnZnZnt23+ccjobu2Tt3enqmu6rfqmprb2/HGGOMyY1+PX0DxhhjTCW8QBljjMkSL1DGGGOyxAuUMcaYLPECZYwxJku8QBljjMkSL1DGGGOyxAuUMcaYLPECZYwxJksmrOXJbW1tTjvx/2lvb2/r7jU8ngUez7rzQXt7+wzduYDHs0S3xxMqj2lb209Tv69l9anmO1/TAmV6hr46gc3YaC5AMR8qtQGjmnhbfYGGjeeEE/70M/z999+nNn2mP/74Y6NetiXwAtUCeGHqG0w88cRjtX377bdA53PA86O1+eGHH4Dy59ibP9MJJpggvefx4TMoY4wxWeIFyhhjTJbYxWdMJiyzzDIAvPHGG6ntnXfeAeCbb77pkXsyjUeu3a+++qqH76RxxHPSiSaaqOqzNVtQxhhjsiRLCyqutv369Sv9G5Uuvfkg0fQ97rvvvrHa4ncBev+cn2+++QCYYoopANhkk01S3yOPPALA9ddfn9ri70GrkqvlNNFEEwH1+c2Nf1etQAJsQRljjMkUL1DGGGOypMdcfNF1scIKKwCwxx57ALDeeuulvskmmwwoXHyffvpp6rv00kuBsmtEbb3B9O8uGrNIx8PJSSaZJD1WzM3888+f2v70pz8BhVvl3HPPTX21mOqRcQSWmgpUMz6tPp6TTz55enzDDTcAMO+88wLl96b5ue2226a2m266CYDPPvus4ffZV5Br75NPPgHKbtYbb7yxS9ecYIIJ0uPvv/++6nlqC8oYY0yWtNWy46pHbi7t6nfbbbfUdsoppwDFKht3/lrFP/roIwCmmWaa1CfrKloFO+20EwAXX3xxd2+1U1opd9xUU02VHn/55ZdAYTnFcXrhhRcA2HrrrVPb1FNPDVTOcqDP5rDDDkttw4cPH+/9/OxnP0uPv/vuO9rb21tqPFuER9vb25fuzgWaNZ7TTz99eqw5KJHEF198kfr69+8/1t+efvrpAAwZMgRoqOek2+MJP41pW1tbyYLQd/Hrr7/u7uXrwnTTTQfAe++9B8D222+f+i666KK6vU4133lbUMYYY7KkKRZU9D8utthiAFx55ZWpbbbZZgOKMw0FJwKsv/76ADzzzDNAsbMCGDZsGADrrrtuahs0aBAADz30UFdutWpaYccvy2nPPfdMbUsssQQA7777LgC77LJL6ovnUbUQg0h/9atfAfDyyy/XdI1WGM8Wo2UsqCmnnDI9vuWWW4DCi3LyySenvuOOOw6AOeaYI7V99913ACywwAIAvPbaa426zbpZUB3b9PtY6UxXZ3DRg9FoS+sPf/gDAAcffDAAv/jFL1LfK6+80qVrxjUg5B60BWWMMaY18QJljDEmS5oiM19llVXS46uvvhoou5P+85//AIWEWRHjAM8++yxQCCHGjBmT+uS6+v3vf5/auip97k3ILSC5/u677576ZpllFqCoQVNJil4JjX+l50uWCjDrrLMCtbv4ckGuCI0TFC5ozbfFF1889clFLrd0dJnfe++9QDGHAR599FEA3n//fSDfLALNJErEV1xxRaD4HKI766WXXgLg4YcfTm2axxJaNNDF1zA6+83SfKrVrRe/p12tKaW5WY8x7ervsi0oY4wxWVKzSKJjsSmt1JVW6UknnRSAu+66K7UpY3Ns23jjjYGydZQ7OR/qS0jy9ttvl/6/EpWKpMXPUo+jlSR0QH3ooYemthNOOGGs61ZDT4ynLM0DDjggtR1xxBFAMXehmOMd8+J1BY3n559/DsDIkSNTnyS8l19+eWqLMusaaRmRRLVo/KPVqXk2zzzzAMWcbwANE0nUE3mmTjvttNQmC/6kk04a599Fi+uDDz4A4Pjjjy/92x065lf94YcfLJIwxhjTuniBMsYYkyU1iSTa2trGqiffmdtDB3ujR49ObYqDijmdWsm11wpUyrAh5FqSGykegN5///1AcYAPcMkllwBFGQQdSkPhfoqxKq2UC05ZR5RvEIr7V5YMKA7xf/7znwNld4ie//HHHwPw5ptvpr633noLgDnnnDO16TBfGTpWWmml1LfccssBcOutt6a2brj4+gT6/enrBR01JwcOHAiU4xvXXnvt8f695jYU2Xq6Kq6oRPxdcMFCY4wx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iS922GGH1HbccccBMNVUUwEwwQQTpD65TgYPHpza5Pazi8/UGwkDNCehcPGJueeeOz2Wi890ThRhzDDDT7Gz+i2I7tHJJpsMgP/9739NvDtTT2xBGWOMyZKWsaB00LzKKquktiFDhgAwcODA1Pbtt98CcOWVVwJw1llnpb5JJpkEgPnmmy+1ycKq9mC6ra3N1pYZJ5pjABtttBEA2267bWrT7v+TTz4B4JFHHkl9rS6OaDQau0qikzXWWAOAZZZZJvV9+umnAOy4446p7dprr234fTaCaDXKMt9zzz1T24ILLgjAwgsvDMBjjz2W+u68804AbrzxxrGuW414JYaRdMwCA8W8bcTvoi0oY4wxWdIQC0orfD0D8iQbP++881Jb//79AXj//fdT26qrrgoU8nHdAxT+6mHDhqW2xx9/HIB77rmnqnu19WQqoTm///77p7Y//vGPYz3vww8/BODAAw8E4K233mrC3bUO2qHHwF4x55xzAnDppZemtsUWWwwovpdxtz/NNNMAsMgii6S26667rvT83JliiimAsuX3y1/+EoDpp58+tXW0bFZcccX0WHNS7/njjz9OfTfccMNYrzn11FMDxXhHy/6///0vALfddltqu+iii4DK4UTdxRaUMcaYLPECZYwxJkvaajF1q61l0jH9fqXcXNWywAILAHDOOecAsMIKK6S+P//5z0DZZddZbjO5DR599NHUJinq/PPPX9N95VK/SG6MLbbYIrUNGDAAgF//+tdA2QU688wzA4XrUy4PgIsvvhiAZ555JrXpoLnR5DKeXWXeeecFChcIwMQTTwyU3czDhw8HYOjQoQB8/fXXjbqlR9vb25fuzgV6YjwVHnL44YcDsMEGG6S+ueaaCyi7nPSdvuuuu4Cy+0plYOJvzlFHHQV0SXre7fGE2sdUGUcOOuig1BZDZ4Te65tvvgmUxToSleiYpJLoIbrnfvazn43zfiSqiHNavzdR8FMN1XznbUEZY4zJkoaIJDrKZeOKHVfecRF3COeeey5QWE5Rsvvvf/8bKLJqj49KBfNGjBhR1d/mwGyzzQYUwcUA++23H1DOGK/3p89BO89K7LXXXunx7rvvDpR3l8plqCDSRhyENpJGF9PTXN13332B8u5TrylBBMBpp50GVPc96CvE76Ok0wohidaP5t7tt9+e2jQvjzzySKDyb0H8/Wk1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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 72/100, d_loss=0.258, g_loss=6.131                                                                                                                      \n",
      "epoch = 73/100, d_loss=0.211, g_loss=6.120                                                                                                                      \n",
      "epoch = 74/100, d_loss=0.325, g_loss=5.433                                                                                                                      \n",
      "epoch = 75/100, d_loss=0.225, g_loss=5.419                                                                                                                      \n",
      "epoch = 76/100, d_loss=0.198, g_loss=6.177                                                                                                                      \n",
      "epoch = 77/100, d_loss=0.386, g_loss=5.269                                                                                                                      \n",
      "epoch = 78/100, d_loss=0.200, g_loss=5.318                                                                                                                      \n",
      "epoch = 79/100, d_loss=0.235, g_loss=6.121                                                                                                                      \n",
      "epoch = 80/100, d_loss=0.190, g_loss=6.668                                                                                                                      \n",
      "epoch = 81/100, d_loss=0.235, g_loss=4.656                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xm8XdP5x/HPJTGHiCnGoMQ8RAVBDKVmYh5qqJpinhVFa2q1NRU1S/GqWWlehipVNKghiaYxD0HMUWOIMdzfH37ftde+d+c6594zrH3v9/1PT9e+zt13Z5+z9rPWs57V0traipmZWWqma/YJmJmZFXEHZWZmSXIHZWZmSXIHZWZmSXIHZWZmSXIHZWZmSXIHZWZmSXIHZWZmSXIHZWZmSepVzQ+3tLS47MT/a21tbenqe/h6Znw9a+691tbWebryBr6eOV2+nuBrGqvkM19VB5Wq6abLAsFvv/22Zu9VpKvvXy+dvQZF/930008f2r755hsAWlq+u5dcGqt6unbQ9esX/3t19F6tra0Tu/SLerBp/Hv5enZB/J0C2ffK96m6g2ppaUnuSyq+oWSmmWYC4Isvvmj3c/H59+7dG4Cvv/4agD59+oRjkydPbvfzqepsx1n0txXdPGW4BqnSPQbw1VdfAcX3oj7E8fWfddZZAZgyZUru/wN8+umnufeCdB+gmqFXr+++3qZOndrkM7H4vqzmu8RzUGZmliR3UGZmlqRuMcRXNCQVD+1J0XlraE8+/vjj2p1YCaT2b9kdaVgvVunQqob25JNPPqnovVJTy3m4SmlYqaPfXXSsDNezbDp7TR1BmZlZkqqOoKabbjpPxJpZVZoRlVTyPeVoKW2OoMzMLEnuoMzMLElVD/F5TUF9adK2aL2LmVlP4gjKzMyS1C1KHXUnmrRNNWqaccYZw+svv/yyiWfSeUUVG8xSVlR+rCdwBGVmZklyBGUdmnPOOQFYeeWVATjxxBPDsb333huAV199teHnVakZZpgB8NyppauSQsy1jJrigsNLLLEEAG+88UZo++yzz2r2u7rKEZSZmSXJHZSZmSUpySG+eEJwnnm+2yNsrbXWAmDLLbcMx9Zee20Afv3rX4e2e+65B8hq8X344YfhWFEI7ZXk7a2xxhrh9a9+9SsA1ltvPSD/b3PSSScB2VBfitpubwG1/TfX+84222wArLTSSuHY4MGDATj88MND28SJ320r9JOf/ATID62UlYZRpW19S/DnrCP1vjbzzTcfAOeccw4A22yzTTim4b7tt98+tN15550NOa9KOIIyM7MktVTTS9Z7u2JN2OmpHbKeXRsQxpOFeh1PgOsJX5sNxscefvhhIF/p/MwzzwTgxRdfBLKnDcgmC99///12v7O7bFEeRxYLLrggAM8++2xoU2Qg8bXTsVpM4DbjeraNfgAWWWQRIIvOIfv7FBH169cvHFt33XVzbfH1LJr81j01btw4ADbccMNwrMZp+2NbW1tX7cobdHQ9559//vBaoxb6/L722mvh2Nlnnw3ATTfdFNo++uijrpxWs3T5ekL9P/OKZnfdddfQdtZZZwHZPRpX11cEP8sss4S2gQMHAsWV82upks+8IygzM0uSOygzM0tSEkN8Gho44IADADjiiCPCMYWjF198MQA33nhjOKZhvwsuuCC0Lb/88rn3jv8+ld+PJ3GHDx8OwKhRowDYYostwrHrr78eyCcGvPvuu3rfbjHEt9xyy4XXo0ePBmDmmWdu93OqbLH//vuHtmuvvbZm59GM66kJYg3TQTaRrHsSsiHAos/KhAkTAHjyyScBmDRpUjh29dVXA/Czn/0stGmYUMkU8RDf/fffX83pF4qGFes6xBfTMPwNN9wAFFc9ePvtt0PboYceCsDLL78M5IfQdf5af7fAAguEY7oHl1xyydD23nvvAfC///0PgDFjxoRjNV77lvQQ39xzzw3AvvvuC8Dpp58ejuk79Pzzzwfyaxn1c0ceeWRoGzJkCJC/lvXgIT4zMyutpqWZL7300uG1khf69OkD5CsT/OIXvwBg5MiRQH6Svm/fvgD0798/tOmp6emnnwbgwAMPDMfmmGMOAB5//PHQFj+9Afzxj3/szJ+TtHjiXvSUe9xxx4U2RU7xRm+KDA466CAgf+3KStdDafJxVKhlDXHCwgcffADAvffeC8Dll18ejim55s0338y9N2T3ohIiAA455BAAVlxxRQAWX3zxcKwWEVQzUoNvu+02APbcc08ge5oHOOOMM4AsAQfglltuAbJzjSOdzz//HMiq+cd/jyLejhJRHn300XBMyQFKm4Z8gkDZxZGqoiJ93z3//PPhmO65f/3rX0D+ei+22GLt3uu5556r0xlXzxGUmZklqeER1Oyz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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 82/100, d_loss=0.263, g_loss=5.544                                                                                                                       \n",
      "epoch = 83/100, d_loss=0.205, g_loss=6.301                                                                                                                      \n",
      "epoch = 84/100, d_loss=0.246, g_loss=5.431                                                                                                                      \n",
      "epoch = 85/100, d_loss=0.283, g_loss=6.234                                                                                                                      \n",
      "epoch = 86/100, d_loss=0.238, g_loss=4.719                                                                                                                      \n",
      "epoch = 87/100, d_loss=0.240, g_loss=4.682                                                                                                                      \n",
      "epoch = 88/100, d_loss=0.202, g_loss=5.494                                                                                                                      \n",
      "epoch = 89/100, d_loss=0.211, g_loss=5.638                                                                                                                      \n",
      "epoch = 90/100, d_loss=0.229, g_loss=5.642                                                                                                                      \n",
      "epoch = 91/100, d_loss=0.230, g_loss=6.998                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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HFne66XI4vuw9957A0m5lZqEYFMm9tprr3DMPqvXX3+94uuqlL5dIiISpZqPQVmqt2+h2gTdLFhfrO2341u4FkGVOwbi+8gLhUJF6aCx8a23o446CkhHUI888ggQbzp4tSxatCg8ttXybax00003DedWW201IEmH9i30Ylu+16PGrfZiUaU/ZveSlYtv7X/++edAkoruoyv73vnvr41R2fP/97//DeeOPfbY1OvVsy222CL1/+bWiLTpJJAsduDH+qyHadasWVleYqsoghIRkSipghIRkSi12YaFTz/9dMXPYeG/7wawFHILY21mOsAf//hHoPQuF+s28F06Cxcu5MMPP6zgquPiu1769m26o/Wtt95ay8uJknX32b3lu3x33313AI4++mggvaGmdfF98skn4djMmTMBOOyww4A4tleplH2f3nzzTSDdpWZdRz7xwLr3bc3HHXbYIZyz391///2BZE1NSFafufzyy8OxqVOnArD55psDyXYTja+jHP7vSV66Z21DUbvnik2fsW5o2wQWYPvttwfS79OmBsSwyo4iKBERiVJDOS2EhoaGKJsTfnVpWz/KWguWlAFw8sknA6Wlmno2EA7fD+IuWbKEQqHQ/KJfJYihPP26ZjZR2m+wZ1FDtVuSeSpP38K+8sorgWRyqq2J1hJLDPBr991zzz1AZhOZnysUCk1D4jKUW55WLhZVQrKGox+0v++++4AkGccnSWy44YYA/OlPfwJgu+22C+fsO+2j/pVWWglIIlIfQZVzzVA87d3d9xWX5/8/d5MybW1KvXfKKacAyWaaPpHLVm7v2LEjkF4kwV7TT+zt1asXUHqqemuvv5TvvCIoERGJUpuNQWXBau6f//zn4Zi1sqz/2Vq4UH7kZGLeIr61bIzOJld6fi+ZvPTB11KPHj3C40MOOQRIIic/UdQiIt8SHTRoEAArr7wykKyCDsl4nz0n5Kv87VptakJrWJq4jeWddtpp4ZxFST4l2qLNSZMmter18lS+zbHej7vvvhtIlueCpinnkydPDo+tLP0+ZuWO3VWzDBVBiYhIlFRBiYhIlKLs4vNpvPvttx8AXbt2BeCBBx4I5yw8PeOMM5o8h82Qttn/krbbbrsB0KdPn3DMuqKs7CRtxx13BODxxx8Px+xetZTcPfbYI5ybNm0akB5079y5M5DM0rdB/sa/u6yzVeJ9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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 92/100, d_loss=0.214, g_loss=6.098                                                                                                                      \n",
      "epoch = 93/100, d_loss=0.261, g_loss=6.006                                                                                                                      \n",
      "epoch = 94/100, d_loss=0.268, g_loss=6.796                                                                                                                      \n",
      "epoch = 95/100, d_loss=0.335, g_loss=5.028                                                                                                                      \n",
      "epoch = 96/100, d_loss=0.270, g_loss=5.702                                                                                                                      \n",
      "epoch = 97/100, d_loss=0.192, g_loss=6.074                                                                                                                      \n",
      "epoch = 98/100, d_loss=0.610, g_loss=5.247                                                                                                                       \n",
      "epoch = 99/100, d_loss=0.224, g_loss=5.760                                                                                                                      \n",
      "epoch = 100/100, d_loss=0.252, g_loss=4.981                                                                                                                      \n",
      "epoch = 101/100, d_loss=0.197, g_loss=5.951                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "epochs = 100\n",
    "batch_size = 64\n",
    "smooth = 0.1\n",
    "\n",
    "real = np.ones(shape=(batch_size, 1))\n",
    "fake = np.zeros(shape=(batch_size, 1))\n",
    "\n",
    "d_loss = []\n",
    "d_g_loss = []\n",
    "\n",
    "for e in range(epochs + 1):\n",
    "    for i in range(len(X_train) // batch_size):\n",
    "        \n",
    "        # Train Discriminator weights\n",
    "        discriminator.trainable = True\n",
    "        \n",
    "        # Real samples\n",
    "        X_batch = X_train[i*batch_size:(i+1)*batch_size]\n",
    "        d_loss_real = discriminator.train_on_batch(x=X_batch, y=real * (1 - smooth))\n",
    "        \n",
    "        # Fake Samples\n",
    "        z = np.random.normal(loc=0, scale=1, size=(batch_size, latent_dim))\n",
    "        X_fake = generator.predict_on_batch(z)\n",
    "        d_loss_fake = discriminator.train_on_batch(x=X_fake, y=fake)\n",
    "         \n",
    "        # Discriminator loss\n",
    "        d_loss_batch = 0.5 * (d_loss_real[0] + d_loss_fake[0])\n",
    "        \n",
    "        # Train Generator weights\n",
    "        discriminator.trainable = False\n",
    "        d_g_loss_batch = d_g.train_on_batch(x=z, y=real)\n",
    "\n",
    "        print(\n",
    "            'epoch = %d/%d, batch = %d/%d, d_loss=%.3f, g_loss=%.3f' % (e + 1, epochs, i, len(X_train) // batch_size, d_loss_batch, d_g_loss_batch[0]),\n",
    "            100*' ',\n",
    "            end='\\r'\n",
    "        )\n",
    "    \n",
    "    d_loss.append(d_loss_batch)\n",
    "    d_g_loss.append(d_g_loss_batch[0])\n",
    "    print('epoch = %d/%d, d_loss=%.3f, g_loss=%.3f' % (e + 1, epochs, d_loss[-1], d_g_loss[-1]), 100*' ')\n",
    "\n",
    "    if e % 10 == 0:\n",
    "        samples = 10\n",
    "        x_fake = generator.predict(np.random.normal(loc=0, scale=1, size=(samples, latent_dim)))\n",
    "\n",
    "        for k in range(samples):\n",
    "            plt.subplot(2, 5, k+1)\n",
    "            plt.imshow(x_fake[k].reshape(28, 28), cmap='gray')\n",
    "            plt.xticks([])\n",
    "            plt.yticks([])\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Evaluate model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-19T02:02:33.284689Z",
     "start_time": "2018-06-19T02:02:33.127648Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plotting the metrics\n",
    "plt.plot(d_loss)\n",
    "plt.plot(d_g_loss)\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Discriminator', 'Adversarial'], loc='center right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References\n",
    "\n",
    "* [Convolution](https://devblogs.nvidia.com/deep-learning-nutshell-core-concepts/)\n",
    "* [GAN — DCGAN (Deep convolutional generative adversarial networks)](https://medium.com/@jonathan_hui/gan-dcgan-deep-convolutional-generative-adversarial-networks-df855c438f)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
